package feevale.boteco.util;

import feevale.boteco.bean.Boteco;
import feevale.boteco.bean.Cliente;
import feevale.boteco.bean.Geladeira;

public class ChamaOsBebados implements Runnable {
	
	private Boteco boteco;
	private Thread thread;
	
	public ChamaOsBebados(Boteco boteco) {
		this.boteco = boteco;
		
		this.thread = new Thread(this);
	}
	
	/**
	 * Começa a chamar os bêbados para o bar.
	 */
	public void inicia() {
		this.thread.start();
	}
	
	/**
	 * Fecha o boteco.
	 */
	@SuppressWarnings("deprecation")
	public void finaliza() {
		this.thread.stop();
	}
	
	/**
	 * Chama os bêbados conforme a capacidade do boteco.
	 */
	@Override
	public void run() {
		
		Integer i = 1;
		Integer j = 1;
		
		while (i <= Boteco.DEFAULT_NUMERO_CLIENTES) {
			
			try {
				
				Cliente cliente = new Cliente();
				cliente.setId(i);
				cliente.setGeladeira(escolheGeladeira(j));
				
				boteco.addCliente(cliente);
				cliente.beber();
				
				j = j < Boteco.TIPOS_CERVEJAS.size() ? j + 1 : 1;
				i++;
				
				Thread.sleep(1000); // TODO: Analisar se precisa configurar
				
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}
	
	/**
	 * Para cada cliente do boteco é atribuída a cerveja de sua escolha.
	 */
	private Geladeira escolheGeladeira(Integer j) {
		Geladeira geladeira = null;
		
		for (Geladeira g : Boteco.GELADEIRAS) {
			if (g.getId().equals(j)) {
				geladeira = g;
			}
		}
		
		return geladeira;
	}
	

}
